// exports.AL_Framework_Utils = void 0;
// var $loadTool = require("./AL_Framework_Load_Tool");
// (function (e) {
//     e.chuangjian_jiazai_gongju = function () {
//         return new $loadTool.default();
//     };
//     var t = [];

//     function o(e) {
//         var t = [];
//         var o = Promise.resolve();
//         e.forEach(function (e) {
//             o = o.then(e).then(function (e) {
//                 t.push(e);
//                 return t;
//             });
//         });
//         return o;
//     }

//     function a(e) {
//         return e >= 0 && e <= 9 ? "0" + e : e;
//     }
//     e.genju_shijian_jiange_zhixing_mou_yi_caozuo = function (e, o) {
//         t[o] ? Date.now() - t[o] >= e && (o(), (t[o] = Date.now())) : (o(), (t[o] = Date.now()));
//     };
//     e.huoqu_jiedian_zai_lingyi_jiedian_xia_zuobiao = function (e, t) {
//         var o = e.parent.convertToWorldSpaceAR(e.position);
//         return t.convertToNodeSpaceAR(o);
//     };
//     e.zhuanhuan_jiedian_rect = function (e) {
//         var t = e.parent.convertToWorldSpaceAR(e.position);
//         var o = cc.view.getVisibleSize();
//         var i = cc.view.getCanvasSize();
//         var n = t.x - e.width * e.anchorX * e.scaleX;
//         var a = o.height - t.y - e.height * (1 - e.anchorY) * e.scaleY;
//         var s = i.width / o.width;
//         var r = i.height / o.height;
//         return {
//             left: n * s,
//             top: a * r,
//             width: e.width * e.scaleX * s,
//             height: e.height * e.scaleY * r
//         };
//     };
//     e.qian_kaobei = function (e) {
//         var t = {};
//         for (var o in e) t[o] = e[o];
//         return t;
//     };
//     e.fudianshu_shifou_xiangdeng = function (e, t) {
//         return Math.abs(e - t) < 0.01;
//     };
//     e.geshihua_shuzi = function (e) {
//         return (e = String(e)).replace(/(?=(?!\b)(\d{3})+$)/g, ",");
//     };
//     e.padding = function (e, t) {
//         if (void 0 === t) {
//             t = 2;
//         }
//         return (Array(t).join("0") + e).slice(-t);
//     };
//     e.queue_Promise = function () {
//         var e = [];
//         for (var t = 0; t < arguments.length; t++) {
//             e[t] = arguments[t];
//         }
//         return Array.isArray(e[0]) ? o(e[0]) : o(__spreadArrays(e));
//     };
//     e.huoqu_jiandan_url_budai_kuozhanming = function (e) {
//         var t = e.split("/").pop();
//         var o = t.lastIndexOf(".");
//         return o >= 0 ? t.substring(0, o) : t;
//     };
//     e.huoqu_zhiding_fanwei_suiji_shu = function (e, t) {
//         var o = t - e;
//         var i = Math.random();
//         return e + Math.round(i * o);
//     };
//     e.huoqu_riqi_jian_de_tianshu_cha = function (e, t) {
//         var o = new Date(e).toDateString();
//         var i = new Date(t).toDateString();
//         var n = new Date(o).getTime();
//         return (new Date(i).getTime() - n) / 864e5;
//     };
//     e.getCurrentTime = function () {
//         var e = new Date();
//         return (
//             e.getFullYear() +
//             "-" +
//             a(e.getMonth() + 1) +
//             "-" +
//             a(e.getDate()) +
//             " " +
//             a(e.getHours()) +
//             ":" +
//             a(e.getMinutes()) +
//             ":" +
//             a(e.getSeconds())
//         );
//     };
//     e.repair = a;
// })(exports.AL_Framework_Utils || (exports.AL_Framework_Utils = {}));


const $loadTool = require("./AL_Framework_Load_Tool");

/**
 * 工具类，用于提供一些常用的方法
 */
exports.AL_Framework_Utils = (function() {
    /**
     * 创建加载工具实例
     * @returns {$loadTool.default} 加载工具实例
     */
    function chuangjian_jiazai_gongju() {
        return new $loadTool.default();
    }

    /**
     * 按顺序执行一组Promise
     * @param {Array<Function>} promiseArray - 包含一组返回Promise的函数数组
     * @returns {Promise<Array>} - Promise返回的结果数组
     */
    function executePromisesSequentially(promiseArray) {
        const results = [];
        let sequence = Promise.resolve();

        promiseArray.forEach(promiseFn => {
            sequence = sequence.then(promiseFn).then(result => {
                results.push(result);
                return results;
            });
        });

        return sequence;
    }

    /**
     * 格式化数字为双位数字
     * @param {number} num - 需要格式化的数字
     * @returns {string} - 格式化后的双位数字
     */
    function formatToDoubleDigit(num) {
        return num >= 0 && num <= 9 ? "0" + num : num;
    }

    /**
     * 根据时间间隔执行某一操作
     * @param {number} interval - 时间间隔，单位为毫秒
     * @param {Function} action - 需要执行的操作
     */
    function genju_shijian_jiange_zhixing_mou_yi_caozuo(interval, action) {
        if (timeStamps[action]) {
            if (Date.now() - timeStamps[action] >= interval) {
                action();
                timeStamps[action] = Date.now();
            }
        } else {
            action();
            timeStamps[action] = Date.now();
        }
    }

    /**
     * 获取某节点在另一个节点中的位置
     * @param {cc.Node} sourceNode - 源节点
     * @param {cc.Node} targetNode - 目标节点
     * @returns {cc.Vec2} - 目标节点中的位置
     */
    function huoqu_jiedian_zai_lingyi_jiedian_xia_zuobiao(sourceNode, targetNode) {
        const worldPosition = sourceNode.parent.convertToWorldSpaceAR(sourceNode.position);
        return targetNode.convertToNodeSpaceAR(worldPosition);
    }

    /**
     * 将节点的矩形区域转换为画布上的坐标
     * @param {cc.Node} node - 需要转换的节点
     * @returns {Object} - 包含left, top, width, height的对象，表示节点在画布上的矩形区域
     */
    function zhuanhuan_jiedian_rect(node) {
        const worldPos = node.parent.convertToWorldSpaceAR(node.position);
        const visibleSize = cc.view.getVisibleSize();
        const canvasSize = cc.view.getCanvasSize();
        const left = worldPos.x - node.width * node.anchorX * node.scaleX;
        const top = visibleSize.height - worldPos.y - node.height * (1 - node.anchorY) * node.scaleY;
        const scaleWidth = canvasSize.width / visibleSize.width;
        const scaleHeight = canvasSize.height / visibleSize.height;

        return {
            left: left * scaleWidth,
            top: top * scaleHeight,
            width: node.width * node.scaleX * scaleWidth,
            height: node.height * node.scaleY * scaleHeight
        };
    }

    /**
     * 浅拷贝对象
     * @param {Object} obj - 需要拷贝的对象
     * @returns {Object} - 拷贝后的新对象
     */
    function qian_kaobei(obj) {
        const copy = {};
        for (const key in obj) {
            if (obj.hasOwnProperty(key)) {
                copy[key] = obj[key];
            }
        }
        return copy;
    }

    /**
     * 判断两个浮点数是否相等
     * @param {number} num1 - 第一个浮点数
     * @param {number} num2 - 第二个浮点数
     * @returns {boolean} - 是否相等
     */
    function fudianshu_shifou_xiangdeng(num1, num2) {
        return Math.abs(num1 - num2) < 0.01;
    }

    /**
     * 格式化数字为千分位表示法
     * @param {number} num - 需要格式化的数字
     * @returns {string} - 格式化后的字符串
     */
    function geshihua_shuzi(num) {
        return String(num).replace(/(?=(?!\b)(\d{3})+$)/g, ",");
    }

    /**
     * 数字补齐，默认为2位数
     * @param {number} num - 需要补齐的数字
     * @param {number} [length=2] - 需要补齐的长度
     * @returns {string} - 补齐后的字符串
     */
    function padding(num, length = 2) {
        return (Array(length).join("0") + num).slice(-length);
    }

    /**
     * 按顺序执行一组Promise
     * @returns {Promise<Array>} - Promise返回的结果数组
     */
    function queue_Promise() {
        const promiseFns = [];
        for (let i = 0; i < arguments.length; i++) {
            promiseFns[i] = arguments[i];
        }
        return Array.isArray(promiseFns[0]) ? executePromisesSequentially(promiseFns[0]) : executePromisesSequentially(promiseFns);
    }

    /**
     * 获取不带扩展名的简单URL
     * @param {string} url - 完整的URL
     * @returns {string} - 不带扩展名的URL
     */
    function huoqu_jiandan_url_budai_kuozhanming(url) {
        const fileName = url.split("/").pop();
        const dotIndex = fileName.lastIndexOf(".");
        return dotIndex >= 0 ? fileName.substring(0, dotIndex) : fileName;
    }

    /**
     * 获取指定范围内的随机整数
     * @param {number} min - 最小值
     * @param {number} max - 最大值
     * @returns {number} - 随机整数
     */
    function huoqu_zhiding_fanwei_suiji_shu(min, max) {
        const range = max - min;
        const random = Math.random();
        return min + Math.round(random * range);
    }

    /**
     * 获取两个日期之间的天数差
     * @param {string|number|Date} date1 - 第一个日期
     * @param {string|number|Date} date2 - 第二个日期
     * @returns {number} - 天数差
     */
    function huoqu_riqi_jian_de_tianshu_cha(date1, date2) {
        const startDate = new Date(date1).toDateString();
        const endDate = new Date(date2).toDateString();
        const startTimestamp = new Date(startDate).getTime();
        const endTimestamp = new Date(endDate).getTime();
        return (endTimestamp - startTimestamp) / 864e5;
    }

    /**
     * 获取当前时间的字符串表示
     * @returns {string} - 当前时间字符串
     */
    function getCurrentTime() {
        const now = new Date();
        return (
            now.getFullYear() +
            "-" +
            formatToDoubleDigit(now.getMonth() + 1) +
            "-" +
            formatToDoubleDigit(now.getDate()) +
            " " +
            formatToDoubleDigit(now.getHours()) +
            ":" +
            formatToDoubleDigit(now.getMinutes()) +
            ":" +
            formatToDoubleDigit(now.getSeconds())
        );
    }

    // 使用对象字面量导出方法
    return {
        chuangjian_jiazai_gongju,
        genju_shijian_jiange_zhixing_mou_yi_caozuo,
        huoqu_jiedian_zai_lingyi_jiedian_xia_zuobiao,
        zhuanhuan_jiedian_rect,
        qian_kaobei,
        fudianshu_shifou_xiangdeng,
        geshihua_shuzi,
        padding,
        queue_Promise,
        huoqu_jiandan_url_budai_kuozhanming,
        huoqu_zhiding_fanwei_suiji_shu,
        huoqu_riqi_jian_de_tianshu_cha,
        getCurrentTime,
        repair: formatToDoubleDigit
    };
})();

// 本地变量
var timeStamps = [];
